<?php
class CanboController extends Controller
{
    # Khởi tạo các giá trị ban đầu cho template main
    public function initial()
    {
        $appConfig = $GLOBALS['config']->app;

        $this->assign('intro-content', $appConfig->intro);
        $this->assign('owner', $appConfig->fullName);
        $this->assign('owner-email', $appConfig->email);
        $this->assign('copyright', $appConfig->copyright);
        $this->assign('org', $appConfig->org);
        $this->assign('org-add', $appConfig->org_add);
    }

    public function view($id = null)
    {
        if ($this->checkCookie() && !isset($_SESSION['refesh_view'])) {
            $_SESSION['refesh_view'] = 1;
            $url = ROOT_URL;
            header("location: {$url}");
        }

        # Lưu cookie
        if (isset($_SESSION['user']['pass'])) {
            $time = time() + 3600 * 24 * 30;
            setcookie('user', $_SESSION['user']['id'], $time);
            setcookie('pass', $_SESSION['user']['pass'], $time);
        }

        # Nếu chưa đăng nhập thì chuyển đến trang đăng nhập
        if (!isset($_SESSION['user'])) {
            $url = ROOT_URL . 'canbo/login';
            header("location: {$url}");
        }


        $this->assign(
            array(
                 "hoten" => $_SESSION['user']['hoten'],
                 "quyen" => $_SESSION['user']['type'] == 'admin' ? "Quản lý" : "Cán bộ"
            )
        );

        # Lấy ID cán bộ cần xem, nếu không thiết lập thì lấy cán bộ hiện tại
        if (!$id) {
            $id = $_SESSION['user']['id'];
        } else {
            $id = rtrim($id, '/');
        }

        $info = $this->_model->getInfo($id);
        $this->assign('admin', $_SESSION['user']['type'] == 'admin');
        $info['cb_kethon'] = $info['cb_kethon'] == 1 ? 'Đã kết hôn' : 'Độc thân';

        $this->assign($info);
        $this->assign('ngoaingu', $this->_model->getNgoaiNgu($id));

        $tk = new ThongKe();
        $this->assign('nangbac', $tk->checkNangBac($id));
    }

    public function logout()
    {
        unset($_SESSION['user']);
        setcookie('user', '', time() - 1);
        setcookie('pass', '', time() - 1 );
        $this->assign('url', ROOT_URL);
    }

    public function pwd($p)
    {
        $this->assign('pwd', generatePwd($p));
    }

    public function login($redirect = null)
    {

        if (!isAjaxRequest()) {
            $this->initial();
        }
        $this->checkCookie();


        # Kiểm tra nếu đã đăng nhập thì redirect
        if (isset($_SESSION['user']) && !isAjaxRequest()) {
            $redirect = ROOT_URL . $redirect;
            header("location: {$redirect}");
        } else {
            if (isset($_POST['user']) && isset($_POST['pass'])) {
                $success = $this->_model->login($_POST);


                if ($success && $_POST['save'] == 1) {
                    $_SESSION['user']['pass'] = generatePwd($_POST['pass']);
                }



                $this->assign('loginCode', $success);

                # Nếu có thiết URL chuyển đến sau khi đăng nhập thì chuyển cho client
                $this->assign('redirect', $redirect);
            } else {
                $this->assign('loginCode', false);
            }
        }
    }

    public function checkCookie()
    {
        if (isset($_COOKIE['user'])) {
            return $this->_model->login(array(
                'user' => $_COOKIE['user'],
                'pass' => $_COOKIE['pass']
            ), true);
        } else {
            return false;
        }
    }

    public function congtac()
    {
        $ctData = $this->_model->getCongTac($_SESSION['user']['id']);

        $hdData = $this->_model->getHopDong($_SESSION['user']['id']);

        $this->assign('qtct', $ctData);
        $this->assign('hopdong', $hdData);
    }

    public function update()
    {
        $this->assign($this->_model->getInfo($_SESSION['user']['id']));
    }

    public function doimatkhau()
    {
        if (isset($_POST['submit'])) {
            $this->_model->changePassword($_POST['cb_matkhau']);
            $this->assign('info', 'Thay đổi mật khẩu thành công!');
        }
    }

    public function checkPassword()
    {
        $this->assign('check', $this->_model->checkPassword($_SESSION['user']['id'], $_POST['pw']) == 1);
    }

    public function updateProcess()
    {
        # Xử lý ảnh được tải lên
        $newImage = CanboController::handlerImageUploaded('cb_hinh_new');
        if ($newImage) {
            $_POST['cb_hinh'] = $newImage;
        }
        if ($this->_model->update($_POST, 'cb_id = :id', array('id' => $_SESSION['user']['id']))) {
            $this->assign('info', 'Cập nhật hoàn tất!');
        } else {
            $this->assign('info', 'Cập nhật thất bại, vui lòng thử lại sau!');
        }
    }

    public function test()
    {
        $this->_model->add();
    }

    public static function handlerImageUploaded($name)
    {
        if (isset($_FILES[$name]) && $_FILES[$name]['error'] == 0) {
            $newName = md5(time()) . '-' . $_FILES[$name]['name'];
            $path = ROOT . $GLOBALS['config']->app->img_folder . '/';
            move_uploaded_file($_FILES[$name]['tmp_name'], $path . $newName);
            return $newName;
        } else {
            return null;
        }
    }

    public function process()
    {
        if (isset($_POST['submit'])) {
            $requestType =strtolower($_POST['type']);
            if ($requestType == 'update'){
                $this->updateProcess();
            } elseif ($requestType == 'changepassword') {
                $this->doimatkhau();
            } elseif ($requestType == 'edit') {
                $this->editProcess();
            } elseif ($requestType == 'delete') {
                $this->delProcess();
            } elseif ($requestType == 'add') {
                $this->addProcess();
            } elseif ($requestType == 'thuyenchuyen_giangday') {
                $this->thuyenchuyen_giangday();
            } elseif ($requestType == 'thuyenchuyen_hanhchinh') {
                $this->thuyenchuyen_hanhchinh();
            } else {
                $this->assign('info', 'Yêu cầu không hợp lệ!');
            }

            $this->assign('redirect', 'quanly/canbo');
        } else {
            $this->assign('info', 'Không có yêu cầu cần xử lý!');
        }
    }

    public function khenthuong()
    {

        $this->assign('khenthuong', $this->_model->getKhenThuong($_SESSION['user']['id']));
        $this->assign('kyluat', $this->_model->getKyLuat($_SESSION['user']['id']));

    }

    private function editFormInitial()
    {
        # Khởi tạo danh sách dân tộc
        $dantoc = new Dantoc();
        $this->assign('dantoc', $dantoc->selectAll());

        # Khởi tạo danh sách tôn giáo
        $tongiao = new Tongiao();
        $this->assign('tongiao', $tongiao->selectAll());

        # Khởi tạo danh sách trình độ
        $trinhdo = new Trinhdo();
        $this->assign('trinhdo', $trinhdo->selectAll());

        # Khởi tạo danh sách học vị
        $hocvi = new Hocvi();
        $this->assign('hocvi', $hocvi->selectAll());

        # Khởi tạo danh sách học hàm
        $hocham = new Hocham();
        $this->assign('hocham', $hocham->selectAll());

        # Khởi tạo danh sách bậc, ngạch
        $bac = new Bac();
        $ngach = new Ngach();
        $this->assign('bac', $bac->selectAll());
        $this->assign('ngach', $ngach->selectAll());

        # Nhóm người dùng
        $group = new Usergroup();
        $this->assign('group', $group->selectAll());
    }

    public function edit($id = null)
    {
        $appConfig =& $GLOBALS['config']->app;
        # Kiểm tra quyền người dùng sử dụng chức năng sửa thông tin cán bộ
        if (!isset($_SESSION['user'])) {
            $url = ROOT_URL . 'canbo/login/canbo/edit/' . $id;
            header("location: {$url}");
        } elseif ($_SESSION['user']['type'] != 'admin') {
            throw new Exception('Không có quyền truy xuất chức năng!');
        } else {
            # The $id will be assigned to current user's id if it was not set
            if (!$id) {
                $id = $_SESSION['user']['id'];
            }
            $data = $this->_model->getFullInfo(rtrim($id, '/'));
            if (count($data) > 0) {
                $data = $data[0];
                if (!file_exists(ROOT . DS . $appConfig->img_folder . DS . $data['cb_hinh'])) {
                    $data['cb_hinh'] = $appConfig->img_default;
                }

                $data['cb_hinh'] = $appConfig->img_folder . '/' . $data['cb_hinh'];

                $this->assign($data);
                $this->editFormInitial();
                $this->assign('type', 'edit');

            } else {
                throw new Exception("Mã cán bộ <strong>{$id}</strong> không tồn tại!");
            }
        }
    }

    public function editProcess()
    {
        if (!isset($_SESSION['user']) || $_SESSION['user']['type'] != 'admin') {
            throw new Exception("Không đủ quyền truy cập chức năng!");
        } else {
            $cb_hinh = $this->handlerImageUploaded('cb_hinh_new');
            if ($cb_hinh) {
                $_POST['cb_hinh'] = $cb_hinh;
            } elseif (isset($_POST['cb_hinh'])) {
                unset($_POST['cb_hinh']);
            }

            # Xử lý ngày sinh cán bộ
            if (preg_match('/^\d{4}$/', $_POST['cb_nsinh'])) {
                $_POST['cb_nsinh'] .= '-01-01';
            } else {
                $_POST['cb_nsinh'] = preg_replace("/(\d{1,2})\/(\d{1,2})\/(\d{4})/", "$3-$2-$1", $_POST['cb_nsinh']);
            }

            if (isset($_POST['cb_matkhau_new']) && strlen($_POST['cb_matkhau_new']) > 0) {
                $_POST['cb_matkhau'] = generatePwd($_POST['cb_matkhau_new']);
                unset($_POST['cb_matkhau_new']);
            } else {
                $_POST['cb_matkhau'] = generatePwd('123456');
            }

            $this->_model->update($_POST, 'cb_id = :id', array('id' => $_POST['cb_id']));
            $this->assign('info', 'Cập nhật dữ liệu hoàn tất!');
            $this->assign('redirect', '/quanly/canbo');

        }
    }

    public function xoa($id)
    {
        if (!isset($_SESSION['user']) || $_SESSION['user']['type'] != 'admin') {
            throw new Exception("Không đủ quyền truy cập chức năng!");
        } else {
            $id = rtrim($id, '/');
            $data = $this->_model->selectById($id);
            if (count($data) > 0) {
                $this->assign($data[0]);
            } else {
                throw new Exception("Mã số cán bộ cần xóa [{$id}] không tồn tại!");
            }
        }
    }

    private function delProcess()
    {
        $id = $_POST['cb_id'];
        $this->assign('redirect', '/quanly/canbo');
        if ($id == $_SESSION['user']['id']) {
            $this->assign('info', 'Không thể xóa người dùng hiện tại');
        } else {
            $r = $this->_model->del($id);
            $this->assign('info', "Thực hiện xóa hoàn tất (đã xóa {$r} cán bộ)");
        }
    }

    public function them()
    {
        if (!isset($_SESSION['user']) || $_SESSION['user']['type'] != 'admin') {
            throw new Exception("Không đủ quyền truy cập chức năng!");
        } else {
            $this->editFormInitial();
            $this->assign('showimage', false);
            $this->assign('title', 'Thêm mới cán bộ');
            $this->assign('type', 'add');
        }
    }

    private function addProcess()
    {
        $cb_hinh = $this->handlerImageUploaded('cb_hinh_new');
        if ($cb_hinh) {
            $_POST['cb_hinh'] = $cb_hinh;
        } else {
            $_POST['cb_hinh'] = $GLOBALS['config']->app->img_default;
        }

        # Xử lý ngày sinh cán bộ
        if (preg_match('/^\d{4}$/', $_POST['cb_nsinh'])) {
            $_POST['cb_nsinh'] .= '-01-01';
        } else {
            $_POST['cb_nsinh'] = preg_replace("/(\d{1,2})\/(\d{1,2})\/(\d{4})/", "$3-$2-$1", $_POST['cb_nsinh']);
        }

        if (isset($_POST['cb_matkhau_new']) && strlen($_POST['cb_matkhau_new']) > 0) {
            $_POST['cb_matkhau'] = generatePwd($_POST['cb_matkhau_new']);
            unset($_POST['cb_matkhau_new']);
        } else {
            $_POST['cb_matkhau'] = generatePwd('123456');
        }

        $newId = $this->_model->add();
        $this->assign('info', "Thêm cán bộ hoàn tất [{$newId} - {$_POST['cb_hoten']}].");
        $this->assign('redirect', ROOT_URL . '/quanly/canbo');

    }

    public function thuyenchuyen($id)
    {
        if (!isset($_SESSION['user']) || $_SESSION['user']['type'] != 'admin') {
            throw new Exception("Không đủ quyền truy cập chức năng!");
        } else {
            $id = rtrim($id, '/');
            $data = $this->_model->getInfo($id);
            $this->assign('canbohanhchinh', isset($data['cb_nghiepvu']));
            $this->assign($data);
            if (isset($data['dv_id'])) {
                $this->assign('cb_chucvu', $this->_model->getChucVu($data['cb_id'], $data['dv_id']));
            }


            # Khởi tạo chức vụ
            $chucvu = new Chucvu();
            $this->assign('chucvu', $chucvu->selectAll());

            # Khoi tao don vi
            $phongban = new Phongban();
            $this->assign('phongban', $phongban->selectAll());

            $khoa = new Khoa();
            $this->assign('khoa', $khoa->selectAll());

            $chucdanh = new Model('chucdanh');
            $this->assign('chucdanh', $chucdanh->selectAll());

            $nghiepvu = new Nghiepvu();
            $this->assign('nghiepvu', $nghiepvu->selectAll());

        }
    }

    private function thuyenchuyen_giangday()
    {
        $this->_model->thuyenchuyen_giangday($_POST['cb_id'], $_POST['cd_id'],
            $_POST['k_id'], $_POST['bm_id'], $_POST['cv_id']);
        $this->assign('info', 'Thực hiện thuyên chuyển hoàn tất!');
        $this->assign('redirect', '/quanly/canbo');
    }

    private function thuyenchuyen_hanhchinh()
    {
        $this->_model->thuyenchuyen_hanhchinh($_POST['cb_id'], $_POST['nv_id'], $_POST['pb_id'], $_POST['cv_id']);
        $this->assign('info', 'Thực hiện chuyển đổi hoàn tất!');
        $this->assign('redirect', '/quanly/canbo');
    }

    public function inds()
    {
        $this->assign('canbo', $this->_model->getList());
    }

}